package com.tcc.fastline.Domain;

import java.util.Date;

import android.util.Log;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.annotations.SerializedName;

public class IntegranteFila {
	@SerializedName("id")
	private Integer codigo;
	@SerializedName("fila")
	private Fila fila;
	@SerializedName("usuario")
	private Usuario usuario;
	@SerializedName("qtdePessoas")
	private Integer qtdePessoas;
	@SerializedName("isPreferencial")
	private boolean isPreferencial;
	@SerializedName("dataEntradaFila")
	private Date dataEntrada;
	@SerializedName("dataSaidaFila")
	private Date dataSaida;

	public IntegranteFila() {
		this.fila = new Fila();
		this.usuario = new Usuario();
	}

	public IntegranteFila(String json) {
		try {
			Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss").create();

			IntegranteFila integrante = gson.fromJson(json,IntegranteFila.class);

			this.setCodigo(integrante.getCodigo());
			this.setDataEntrada(integrante.getDataEntrada());
			this.setDataSaida(integrante.getDataSaida());
			this.setFila(integrante.fila);
			this.setPreferencial(integrante.isPreferencial());
			this.setQtdePessoas(integrante.getQtdePessoas());
			this.setUsuario(integrante.getUsuario());

		} catch (Exception e) {
			Log.e("ERRO", e.getMessage());
			throw new RuntimeException(
					"Erro ao gerar integrante fila recebido do webservice, motivo: "
							+ e.getMessage());

		}
	}

	@Override
	public String toString() {

		String json = "";
		try {
			Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss").create();
			json = gson.toJson(this);

		} catch (Exception e) {
			Log.e("ERRO", e.getMessage());
			throw new RuntimeException(
					"Erro ao gerar integrante fila para envio ao webservice, motivo: "
							+ e.getMessage());

		}

		return json;
	}

	public boolean isValid() {
		
		return (this != null && this.getFila().isValid()
				&& this.getUsuario().isValid() && !this.getQtdePessoas().equals(0));
	}

	public Integer getCodigo() {
		return codigo;
	}

	public void setCodigo(Integer codigo) {
		this.codigo = codigo;
	}

	public Fila getFila() {
		return fila;
	}

	public void setFila(Fila fila) {
		this.fila = fila;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public Integer getQtdePessoas() {
		return qtdePessoas;
	}

	public void setQtdePessoas(Integer qtdePessoas) {
		this.qtdePessoas = qtdePessoas;
	}

	public boolean isPreferencial() {
		return isPreferencial;
	}

	public void setPreferencial(boolean isPreferencial) {
		this.isPreferencial = isPreferencial;
	}

	public Date getDataEntrada() {
		return dataEntrada;
	}

	public void setDataEntrada(Date dataEntrada) {
		this.dataEntrada = dataEntrada;
	}

	public Date getDataSaida() {
		return dataSaida;
	}

	public void setDataSaida(Date dataSaida) {
		this.dataSaida = dataSaida;
	}
}
